我在信息学奥赛上,用Bug直接改了验算数据,拿了满分算作弊嘛?
(给算法爱好者加星标,修炼编程内功)
作者:郑集杨/量子位
在线考试,一道题太难做不出来,怎么办,是多少写点还是直接放空?
在NOIP 2020(信息学奥赛)上,一位浙江同学,“另辟蹊径”,最终,还拿了满分。
简单来说,就是他在直接指定了验算数据,还要「改卷老师」就按着这个数据判卷。
什么,还可以这么操作?是不是感觉匪夷所思?
这,是NOIP2020被发现的Bug,是怎么回事?又是什么导致的Bug?
直接把验算数据改了
不妨直接来看看选手提交的代码:
图源:洛谷
是的,就是这么直接,打开输入文件,覆盖验算数据;打开输出文件,写入答案。
相当于做数学题,考生的解题过程只有在特定数据下是正确的,但考生在改卷老师判卷的时候,直接让老师全部按着这组数据去改。
是不是发现了核心问题所在了?对,改卷老师的数据能被修改了,就是Bug所在。
在了解Bug之前,我们先来对比和了解一下二者改卷的流程。
在NOIP2020中,验算数据是内置的ball.in文件,答题卡是考生提交的程序,而改卷老师就是系统中的checker。
正常的评测流程:
评测系统给一个输入ball.in文件;
运行选手的程序,得到ball.out文件;
用checker去检查ball.in对应的ball.out文件的答案是不是满足要求。
钻空子后的评测流程:
评测系统给一个输入ball.in文件;
运行选手的程序,选手改了ball.in文件,同时写入ball.out文件;
用checker去检查ball.in(修改过的)对应的ball.out文件的答案是不是满足要求。
这个Bug中最诡异的地方,就是:原本应该只有只读权限的ball.in文件,竟然能够被轻易修改。
这个低级问题,出在哪里,还不知道,但是据网友推测:应该就是落后老旧的评测软件Arbiter的锅。
因为Arbiter的问题和Bug实在是太多了,修改ball.in文件只是其中之一。
知乎网友Menci的回答中,通过Arbiter,选手其实还能直接解限内存(增加计算力)和解限时间(增加答题时长)。
正是由于Arbiter的技术太落后了,存在各种Bug,才让验算数据的修改成为了可能。
此外,网友的讨论,也能发现,在文件读取的指令中,也存在一些问题。
如果改卷老师先把输入数据看一遍,那么就算后面数据被偷换了,也不会出现误判。
但是,系统程序的加载顺序偏偏是,先运行选手的文件,于是,才留下了可乘之机。
当然,这个可乘之机,也是有使用局限的,而这,跟Special judge的独特判定机制有关。
Special Judge,是读取选手提交的特定程序,通过验算数据来确定选手提交的程序输出(ball.out文件)是否正确。
而平常的题目,只需核对答案就行,就不需要读取程序。
直接核对,也就没有了篡改验算数据的机会。
而今年,却是NOIP竞赛首次出现Special Judge题目。
就这样,各种阴差阳错的情况下,NOIP2020中最难的一道题,就这么被「改」出了满分答案。(狗头)
取消成绩?禁赛三年?
这位同学此次的行为,算是踩到了竞赛本身和竞赛规则的一处灰色地带。
至于会怎么处理,还不得而知,我们只能从规定和往年的一些案例中窥探一二。
在往年中,CCF本身是对违规行为有着规定和处罚的。对于个人违规的判例上,可以分为三个层级:
不合程序的成绩作废;
选手禁赛三年;
扣除所在省选下季名额1个,优先扣除作弊选手所在学校的名额。
从过往案例来看,如果只是选手在过程中被认为不合乎程序,那么即该部分成绩取消,这种情况一般是没有直接认定为作弊。
而一旦认定为作弊,则是禁赛三年和扣除名额同时进行。
可以看出,认定为作弊和非作弊二者之间,处罚力度之间的差距还是很大。
因此,该同学面临处罚的最关键点,便是在于其行为与作弊之间的一个认定。
那么,CCF往年是如何认定作弊的呢?从往年公告中,我们可以看到:
为获奖采取了抄袭、拷贝等不正当的手段。
另外,在作弊通告中,CCF特别强调:
本学会认为,诚信是对一个成长中的学生最起码的道德要求,也是参加竞赛的前提条件,CCF严厉谴责任何弄虚作假的行为。
按照往年来看,「等行为」与「诚信」,似乎足以给这个行为定性。
但是,也有网友认为:CCF软件出了问题,合理利用规则,没有违反规定。
至于最终如何,只能等待处理结果出来才能知晓了。
网友讨论:快去打CTF
NOIP2020被考生钻了空子,这事一经发布,便引起啦网友的关注和讨论。
在知乎上,相关提问已经有了89W的浏览量,并冲上了当日的知乎热榜。
对于这种黑客式的攻击行为,又怎能不让人想到CTF(网络安全技术夺旗赛)呢?
这也难怪网友们都惊呼:快去打CTF
另外,也有网友调侃道:CTFer又多了个拿奖的地方。
所以,这位同学要不要考虑一下网络安全技术夺旗赛呢?(狗头)
参考链接:
https://www.luogu.com.cn/discuss/show/284885?page=6
https://www.zhihu.com/question/433907534/answer/1617656279
- EOF -
觉得本文有帮助?请分享给更多人
推荐关注「算法爱好者」,修炼编程内功
点赞和在看就是最大的支持❤️